#include "../include/dir.h"

int handle_remove(path_t *path, const char *fileName, char *buf, int buf_len){
    //清空buf 避免调用了多次带buf的函数后面会输出前面buf内容 测试问题mkdir->ls
    bzero(buf, buf_len);

    //规范路径 文件名按相对路径处理
    char newVirPath[MAX_PATH_LEN] = {0};
    char newRealPath[MAX_PATH_LEN] = {0};
    makePath(path, fileName, newVirPath, newRealPath);

    //检查文件是否存在
    if(access(newRealPath, F_OK) != 0){
        strncpy(buf, "文件不存在.\n", buf_len-1);
        return -1;
    }

    //检查是否为文件
    struct stat st;
    stat(newRealPath, &st);  
    if(!S_ISREG(st.st_mode)){
        //不是普通文件 有名目录 管道 设备等都有可能
        strncpy(buf, "不是普通文件.\n", buf_len-1);
        return -1;
    }

    //是文件可删除 
    //一般文件只有一个硬链接除非ln指令创建了新的硬链接 ln 原文件 目标文件
    if(unlink(newRealPath) != 0){
        sprintf(buf, "%s\n", strerror(errno));
        return -1;
    }

    strncpy(buf, "文件删除成功.\n", buf_len-1);
    return 0;
}
